﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Region
{
    public partial class KontForm : Form
    {
        Engine m_engine;
        Kont m_kont;
        ObjectFormUtil m_reader;
        public void readKont()
        {
            m_reader.get();
            /*KontName.Text = m_kont.KontName;
            KontName.Enabled = m_kont.poleAccess("KontName");
            INN.Text = m_kont.INN;
            INN.Enabled = m_kont.poleAccess("INN");
            OGRN.Text = m_kont.OGRN;
            OGRN.Enabled = m_kont.poleAccess("OGRN");
            KontGosReg.Checked = (m_kont.KontGosReg != new DateTime(1970,1,1));
            KontGosReg.Value = m_kont.KontGosReg;
            KontGosReg.Enabled = m_kont.poleAccess("KontGosReg");
            KontOldCheck.Checked = (m_kont.KontOldCheck != new DateTime(1970, 1, 1));
            KontOldCheck.Value = m_kont.KontOldCheck;
            KontOldCheck.Enabled = m_kont.poleAccess("KontOldCheck");
            KontDelDate.Checked = (m_kont.KontDelDate != new DateTime(1970, 1, 1));
            KontDelDate.Value = m_kont.KontDelDate;
            KontDelDate.Enabled = m_kont.poleAccess("KontDelDate");
            KontStart.Checked = (m_kont.KontStart != new DateTime(1970, 1, 1));
            KontStart.Value = m_kont.KontStart;
            KontStart.Enabled = m_kont.poleAccess("KontStart");
            KontTypeID.Items.Clear();
            KontTypeID.Enabled = m_kont.poleAccess("KontTypeID");
            foreach (KeyValuePair<Int32, String> KT in m_engine.KontType)
            {
                Int32 si = KontTypeID.Items.Add(new ListItemValue(KT.Value, KT.Key));
                if (KT.Key == m_kont.KontTypeID) KontTypeID.SelectedIndex = si;
            }
            KontForm_1.Items.Clear();
            KontForm_1.Enabled = m_kont.poleAccess("KontForm");
            foreach (KeyValuePair<Int32, String> KT in m_engine.KontForm)
            {
                Int32 si = KontForm_1.Items.Add(new ListItemValue(KT.Value, KT.Key));
                if (KT.Key == m_kont.KontForm) KontForm_1.SelectedIndex = si;
            }
            KontBosName.Text = m_kont.KontBosName;
            KontBosName.Enabled = m_kont.poleAccess("KontBosName");
            KontTelefon.Text = m_kont.KontTelefon;
            KontTelefon.Enabled = m_kont.poleAccess("KontTelefon");
            KontPostIndex.Text = m_kont.KontPostIndex;
            KontPostIndex.Enabled = m_kont.poleAccess("KontPostIndex");
            KontRegion.Text = m_kont.KontRegion;
            KontRegion.Enabled = m_kont.poleAccess("KontRegion");
            KontRaion.Text = m_kont.KontRaion;
            KontRaion.Enabled = m_kont.poleAccess("KontRaion");
            KontGorod.Text = m_kont.KontGorod;
            KontGorod.Enabled = m_kont.poleAccess("KontGorod");
            KontNaspunkt.Text = m_kont.KontNaspunkt;
            KontNaspunkt.Enabled = m_kont.poleAccess("KontNaspunkt");
            KontStreet.Text = m_kont.KontStreet;
            KontStreet.Enabled = m_kont.poleAccess("KontStreet");
            KontDom.Text = m_kont.KontDom;
            KontDom.Enabled = m_kont.poleAccess("KontDom");
            KontKorpus.Text = m_kont.KontKorpus;
            KontKorpus.Enabled = m_kont.poleAccess("KontKorpus");
            KontKvart.Text = m_kont.KontKvart;
            KontKvart.Enabled = m_kont.poleAccess("KontKvart");
            
            KontFPostIndex.Text = m_kont.KontFPostIndex;
            KontFPostIndex.Enabled = m_kont.poleAccess("KontFPostIndex");
            KontFRegion.Text = m_kont.KontFRegion;
            KontFRegion.Enabled = m_kont.poleAccess("KontFRegion");
            KontFRaion.Text = m_kont.KontFRaion;
            KontFRaion.Enabled = m_kont.poleAccess("KontFRaion");
            KontFGorod.Text = m_kont.KontFGorod;
            KontFGorod.Enabled = m_kont.poleAccess("KontFGorod");
            KontFNaspunkt.Text = m_kont.KontFNaspunkt;
            KontFNaspunkt.Enabled = m_kont.poleAccess("KontFNaspunkt");
            KontFStreet.Text = m_kont.KontFStreet;
            KontFStreet.Enabled = m_kont.poleAccess("KontFStreet");
            KontFDom.Text = m_kont.KontFDom;
            KontFDom.Enabled = m_kont.poleAccess("KontFDom");
            KontFKorpus.Text = m_kont.KontFKorpus;
            KontFKorpus.Enabled = m_kont.poleAccess("KontFKorpus");
            KontFKvart.Text = m_kont.KontFKvart;
            KontFKvart.Enabled = m_kont.poleAccess("KontFKvart");
            /**/
            PDnIP.Enabled = m_kont.isIP()&& m_engine.PDnAccess;
            KontObjectList.Items.Clear();
            Dictionary<Int32, String> Raions = m_engine.Raions;            
            foreach (KeyValuePair<Int32, Kont.KontObject> K in m_kont.KontObjects)
            {
                //User U = m_engine.getUser();
                Int32 KontObjectID = K.Key;
                String S = K.Value.KontObjectName + ": " + Engine.getAddressString(K.Value.KontObjectPostIndex, K.Value.KontObjectRegion, Raions[K.Value.KontObjectRaionID], K.Value.KontObjectGorod, K.Value.KontObjectNaspunkt, K.Value.KontObjectStreet, K.Value.KontObjectDom, K.Value.KontObjectKorpus, K.Value.KontObjectKvart);
                KontObjectList.Items.Add(new Utils.ListItemValue(S, KontObjectID));
            }
        }
        private void saveKont()
        {
            m_reader.set();
            //Int32 vRasporNum, Pred;
            /*if (m_kont.poleAccess("KontName")) m_kont.KontName = KontName.Text;
            if (m_kont.poleAccess("INN")) m_kont.INN = INN.Text;
            if (m_kont.poleAccess("OGRN")) m_kont.OGRN = OGRN.Text;*/
            /*if (m_kont.poleAccess("KontTypeID")) m_kont.KontTypeID = (Int32)((ListItemValue)KontTypeID.SelectedItem).Value;
            if (m_kont.poleAccess("KontForm")) m_kont.KontForm = (Int32)((ListItemValue)KontForm_1.SelectedItem).Value;*/
            /*if (m_kont.poleAccess("KontGosReg")) m_kont.KontGosReg = KontGosReg.Checked ? KontGosReg.Value : new DateTime(1970, 1, 1);
            if (m_kont.poleAccess("KontOldCheck")) m_kont.KontOldCheck = KontOldCheck.Checked ? KontOldCheck.Value : new DateTime(1970, 1, 1);
            if (m_kont.poleAccess("KontDelDate")) m_kont.KontDelDate = KontDelDate.Checked ? KontDelDate.Value : new DateTime(1970, 1, 1);
            if (m_kont.poleAccess("KontStart"))  m_kont.KontStart = KontStart.Checked ? KontStart.Value : new DateTime(1970, 1, 1);            
            if (m_kont.poleAccess("KontBosName")) m_kont.KontBosName = KontBosName.Text;
            if (m_kont.poleAccess("KontTelefon")) m_kont.KontTelefon = KontTelefon.Text;*/
            
            /*if (m_kont.poleAccess("KontPostIndex")) m_kont.KontPostIndex = KontPostIndex.Text;
            if (m_kont.poleAccess("KontRegion")) m_kont.KontRegion = KontRegion.Text;
            if (m_kont.poleAccess("KontRaion")) m_kont.KontRaion = KontRaion.Text;
            if (m_kont.poleAccess("KontGorod")) m_kont.KontGorod = KontGorod.Text;
            if (m_kont.poleAccess("KontStreet")) m_kont.KontStreet = KontStreet.Text;
            if (m_kont.poleAccess("KontDom")) m_kont.KontDom = KontDom.Text;
            if (m_kont.poleAccess("KontKorpus")) m_kont.KontKorpus = KontKorpus.Text;
            if (m_kont.poleAccess("KontKvart")) m_kont.KontKvart = KontKvart.Text;

            if (m_kont.poleAccess("KontFPostIndex")) m_kont.KontFPostIndex = KontFPostIndex.Text;
            if (m_kont.poleAccess("KontFRegion")) m_kont.KontFRegion = KontFRegion.Text;
            if (m_kont.poleAccess("KontFRaion")) m_kont.KontFRaion = KontFRaion.Text;
            if (m_kont.poleAccess("KontFGorod")) m_kont.KontFGorod = KontFGorod.Text;
            if (m_kont.poleAccess("KontFStreet")) m_kont.KontFStreet = KontFStreet.Text;
            if (m_kont.poleAccess("KontFDom")) m_kont.KontFDom = KontFDom.Text;
            if (m_kont.poleAccess("KontFKorpus")) m_kont.KontFKorpus = KontFKorpus.Text;
            if (m_kont.poleAccess("KontFKvart")) m_kont.KontFKvart = KontFKvart.Text;*/
            m_kont.Save();
        }
        public KontForm(Engine engine,Int32 KontID)
        {
            m_engine = engine;
            m_kont = m_engine.getKont(KontID);
            m_reader = new ObjectFormUtil(m_engine, m_kont);
            InitializeComponent();
            m_reader.AddEditor(KontName, "KontName");
            m_reader.AddEditor(INN, "INN");
            m_reader.AddEditor(OGRN, "OGRN");
            m_reader.AddEditor(KontTypeID, "KontTypeID", m_engine.KontType);
            m_reader.AddEditor(KontForm_1, "KontForm", m_engine.KontForm);
            m_reader.AddEditor(KontGosReg, "KontGosReg");
            m_reader.AddEditor(KontOldCheck, "KontOldCheck");
            m_reader.AddEditor(KontDelDate, "KontDelDate");
            m_reader.AddEditor(KontStart, "KontStart");
            m_reader.AddEditor(KontBosName, "KontBosName");
            m_reader.AddEditor(KontTelefon, "KontTelefon");

            m_reader.AddEditor(KontPostIndex, "KontPostIndex");
            m_reader.AddEditor(KontRegion, "KontRegion");
            m_reader.AddEditor(KontRaion, "KontRaion");
            m_reader.AddEditor(KontNaspunkt, "KontNaspunkt");
            m_reader.AddEditor(KontGorod, "KontGorod");
            m_reader.AddEditor(KontStreet, "KontStreet");
            m_reader.AddEditor(KontDom, "KontDom");
            m_reader.AddEditor(KontKorpus, "KontKorpus");
            m_reader.AddEditor(KontKvart, "KontKvart");
            m_reader.AddEditor(KontFPostIndex, "KontFPostIndex");
            m_reader.AddEditor(KontFRegion, "KontFRegion");
            m_reader.AddEditor(KontFRaion, "KontFRaion");
            m_reader.AddEditor(KontFNaspunkt, "KontFNaspunkt");
            m_reader.AddEditor(KontFGorod, "KontFGorod");
            m_reader.AddEditor(KontFStreet, "KontFStreet");
            m_reader.AddEditor(KontFDom, "KontFDom");
            m_reader.AddEditor(KontFKorpus, "KontFKorpus");
            m_reader.AddEditor(KontFKvart, "KontFKvart");
            readKont();
        }



        private void KontPostIndex_TextChanged(object sender, EventArgs e)
        {
            Address.Text = Engine.getAddressString(KontPostIndex.Text, KontRegion.Text, KontRaion.Text, KontGorod.Text, KontNaspunkt.Text, KontStreet.Text, KontDom.Text, KontKorpus.Text, KontKvart.Text);
        }

        private void KontFPostIndex_TextChanged(object sender, EventArgs e)
        {
            FAddress.Text = Engine.getAddressString(KontFPostIndex.Text, KontFRegion.Text, KontFRaion.Text, KontFGorod.Text, KontFNaspunkt.Text, KontFStreet.Text, KontFDom.Text, KontFKorpus.Text, KontFKvart.Text);
        }

        private void KontObjectList_SelectedIndexChanged(object sender, EventArgs e)
        {
           	Utils.ListItemValue item = (Utils.ListItemValue)KontObjectList.SelectedItem;
            KontObjectEdit.Enabled = false;
            KontObjectDel.Enabled = false;
            if (item != null)
            {                
                bool edit = m_kont.kontObjectAccess((Int32)item.Value);
                KontObjectEdit.Enabled = edit;
                KontObjectDel.Enabled = edit;                
            }
            
        }

        private void KontObjectEdit_Click(object sender, EventArgs e)
        {            
            Utils.ListItemValue item = (Utils.ListItemValue)KontObjectList.SelectedItem;
            if (item != null)
            {
                var KOEF = new Forms.KontObjectEditForm(m_engine, m_kont, (Int32)item.Value);
                KOEF.ShowDialog();
                readKont();
            }
        }



        private void button4_Click(object sender, EventArgs e)
        {

            saveKont();
        }

        private void KontForm_Load(object sender, EventArgs e)
        {

        }

        private void CloseButton_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void groupBox2_Enter(object sender, EventArgs e)
        {

        }
        
        void PDnIPClick(object sender, EventArgs e)
        {
          try
          {
            var form =  new Forms.IPForm(m_engine,m_kont.INN,m_kont.OGRN,m_kont.KontName);
            form.ShowDialog();
          }
          catch(SqlException)
          {
            MessageBox.Show("Неудалось подключится к базе данных ПДн ИП. Возможно у вас доступа к этой базе","Ошибка",MessageBoxButtons.OK,MessageBoxIcon.Error,MessageBoxDefaultButton.Button1,MessageBoxOptions.DefaultDesktopOnly,false);
          }
        }
    }
}
